Next:
Auto Type
, Previous:
D) Alias Programming
, Up:
Index
E) return Reference
int
a
=
30
;
// Rvalue
인
30
을
a
로
복
사
return reference
int
&
FunctionOne
(
int
&
a
)
{
a
++
;
return
a
;
}
int
FunctionTwo
(
int
&
a
)
{
a
++
;
return
a
;
}
FunctionOne은 참조자를 반환하고,
FunctionTwo는 변수를 반환한다.
참조자를 반환하게 되면, 실제 객체 그 자체를 반환한다.(Lvalue 속성)
(리턴 변수가 지역변수인 경우, 소멸 시점에 주의해야 함)
변수를 반환하게 되면, return뒤의 객체를 복사된 것을 반환한다.(Rvalue 속성)
int
num1
;
int
num2
=
FuncOne
(
num1
)
;
// num1
과
num2
는
별
개
의
변
수
가
됨
int
num1
;
int
&
num2
=
FuncOne
(
num1
)
;
// num1
과
num2
는
동
일
한
변
수
int에 int&를 리턴받은 경우, 값을 복사한다.
int
num1
;
int
num2
=
FuncTwo
(
num1
)
;
// num1
과
num2
는
별
개
의
변
수
가
됨
int
num1
;
int
&
num2
=
FuncTwo
(
num1
)
;
// error:
참
조
자
는
상
수
를
저
장
할
수
없
음
지역변수의 레퍼런스를 반환하면 안됨
#include
<iostream>
using
std
::
cout
;
using
std
::
endl
;
int
&
function
(
void
)
{
int
val
=
10
;
return
val
;
}
int
main
(
void
)
{
int
&
ref
=
function
(
)
;
cout
<<
ref
<<
endl
;
//
쓰
레
기
값
이
출
력
될
수
있
return
0
;
}